package agenda;

import java.io.Serializable;

/**
 * Classe representativa de uma forma de contato 
 * 
 * @author Emerson Borges - emerson.borges@ccc.ufcg.edu.br
 * @author Rafael Lima    - rafael.ufcg10@gmail.com
 *
 */
public class FormaDeContato implements Serializable {

	private static final long serialVersionUID = 4082193094691224070L;
	private String nome;
	private String endereco;
	private String comentario;
	
	/**
	 * Metodo criador de uma forma de contato
	 * 
	 * @param nome
	 * @param endereco
	 * @throws Exception
	 */
	public FormaDeContato(String nome, String endereco) throws Exception{
        this(nome, endereco, "");
        
	}
	
	/**
	 * Metodo criador de uma forma de contato
	 * 
	 * @param nome
	 * @param endereco
	 * @param comentario
	 * @throws Exception
	 */
	public FormaDeContato(String nome, String endereco, String comentario) throws Exception{
		if (nome == null || endereco  == null || comentario == null) {
			throw new Exception("O nome, o endereco ou comentario n�o podem ser nulos.");	
		}
		else if(nome == "" || endereco  == "" ){
			throw new Exception("O nome ou o endereco n�o podem ser vazios.");
		}
		
        this.nome = nome;
        this.endereco = endereco;
        this.comentario = comentario;
    }

	/**
	 * Metodo para acessar o nome do contato 
	 * 
	 * @return nome
	 */
	public String getNome() {
		return nome;
	}

	/**
	 * Metodo para modificar o nome da forma de contato
	 * 
	 * @param nome
	 */
	public void setNome(String nome) {
		this.nome = nome;
	}

	/**
	 * Metodo para acessar o endereco de uma forma de contato
	 * 
	 * @return endereco
	 */
	public String getEndereco() {
		return endereco;
	}

	/**
	 * Metodo para modificar o endereco de uma forma de contato
	 * 
	 * @param endereco
	 */
	public void setEndereco(String endereco) {
		this.endereco = endereco;
	}

	/**
	 * Metodo para acessar o comentario de uma forma de contato
	 * 
	 * @return
	 */
	public String getComentario() {
		return comentario;
	}

	/**
	 * Metodo para modificar o comentario de uma forma de contato
	 * 
	 * @param comentario
	 */
	public void setComentario(String comentario) {
		this.comentario = comentario;
	}
	
	/**
	 * Metodo para comparar uma forma de contato de acordo com o nome
	 * 
	 * @param forma
	 * @return String
	 */
	public int compararFormaDeContatoPorNome(FormaDeContato forma) {
		FormaDeContato outraFormaDeContato = (FormaDeContato) forma;
		return getNome().compareToIgnoreCase(outraFormaDeContato.getNome());
	}
	
	/**
	 * Metodo para comparar uma forma de contato de acordo com o endereco
	 * 
	 * @param forma
	 * @return String
	 */
	public int compararFormaDeContatoPorEndereco(FormaDeContato forma) {
		FormaDeContato outraFormaDeContato = (FormaDeContato) forma;
		return getEndereco().compareToIgnoreCase(outraFormaDeContato.getEndereco());
	}
	
	@Override
	public String toString(){
        return String.format("%s: %s", getNome(), getEndereco());
        
	}
	
	
}
